package com.bookshop.scheduler;

import org.quartz.*;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import javax.annotation.Resource;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author g2l
 * @create 2022-09-16 22:55
 */
@Component
public class JobDetailAndTriggerService {
    // 调度器
    @Resource
    private Scheduler scheduler;
    @Resource
    private QuartzUtil quartzUtil;
    @Resource
    private MyJob myJob;
    @Resource
    private OrderJob orderJob;

    public void InitBloomFilterQuartz() throws SchedulerException {

        // 这个就是重置布隆过滤器的定时任务，所以使用固定的jobKey
        JobKey jobKey = new JobKey("initBloomFilter", "initBloomFilter");

        // 如果该任务存在则 删除此任务并重建/直接返回
        if (scheduler.checkExists(jobKey)) {
            scheduler.deleteJob(jobKey);
//            return;
        }

        // 创建一个JobDataMap，用于传递参数给任务
        JobDataMap map = new JobDataMap();

        // 使用Quartz工具类获取JobDetail对象，其中包含了要执行的任务类(MyJob)和相关配置
        JobDetail jobDetail = quartzUtil.getJobDetail(jobKey, map, myJob);

        // 使用Quartz工具类获取trigger对象
        Trigger trigger = quartzUtil.getTrigger("initBloomFilter", "initBloomFilter", new JobDataMap());

        // 使用Scheduler对象调度任务，将JobDetail和Trigger传递给scheduler.scheduleJob方法
        scheduler.scheduleJob(jobDetail, trigger);

        // 启动调度器，开始执行任务调度
        scheduler.start();
    }

    public void InitPayStatusQuartz(String orderNo) throws SchedulerException
    {
        JobKey jobKey = new JobKey(orderNo , "InitPayStatusQuartz");

        JobDataMap map = new JobDataMap();
        map.put("orderNo" , orderNo);

        // 使用Quartz工具类获取JobDetail对象，其中包含了要执行的任务类(MyJob)和相关配置
        JobDetail jobDetail = quartzUtil.getJobDetail(jobKey, map, orderJob);

        // 使用Quartz工具类获取trigger对象
        Trigger trigger = quartzUtil.getTrigger1(orderNo, "InitPayStatusQuartz", new JobDataMap());

        // 使用Scheduler对象调度任务，将JobDetail和Trigger传递给scheduler.scheduleJob方法
        scheduler.scheduleJob(jobDetail, trigger);

        // 启动调度器，开始执行任务调度
        scheduler.start();
        System.out.println("定时器开启!");
    }

}
